package jc2;
//第二题：设计一个按时间片轮转法实现处理器调度的程序。
//时间片轮转调度策略：在轮转(RR)法中，系统将所有的就绪进程按FCFS策略排成一个就绪队列。
//        系统可设置每隔一定时间(如30 ms)便产生一次中断，去激活进程调度程序进行调度，把CPU分配给队首进程，并令其执行一个时间片。
//        当它运行完毕后，又把处理机分配给就绪队列中新的队首进程，也让它执行一个时间片。这样，就可以保证就绪队列中的所有进程在确定的时间段内
//        ，都能获得一个时间片的处理机时间。

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 设置时间片长度
        System.out.print("时间片轮转算法\n请设置时间片长度q = ");
        Scanner sc = new Scanner(System.in);
        int timeSlice = sc.nextInt();
        // 读取输入的数组
        PCB[] arr1 = dataReadIn();
        //调用时间片轮转算法
        RR rr = new RR();
        rr.dispatch(arr1, timeSlice);
    }

    public static PCB[] dataReadIn() { //数据读入函数,直接设为静态函数，强制要求写入数据
        System.out.print("请输入本次需要调度的作业数目：");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        PCB[] starr = new PCB[n];
        System.out.println("请输入每一个作业的作业名、到达时间、服务时间（一行一个,中间用空格区分）");
        for (int i = 0; i < n; i++) {
            starr[i] = new PCB(sc.next(), sc.nextInt(), sc.nextInt());
        }
        return starr;
    }
}
